Distributed computing systems are becoming increasingly useful and prevalent. Distributed computers are connected by local area networks, wide area networks, and networks of networks, such as the Internet. These distributed computing systems make available platform-neutral, mobile code environments which contain a growing collection of computational objects, applications, data, and other information in the form of files and/or other named resources.
With the growth of such distributed computing systems and their information content, there is an urgent need to support name services that work across heterogeneous systems, services, and platforms. Powerful and convenient name services are needed to achieve seamless distribution of critical computations, and to make the power of such systems available for more widespread use. Name services help users (both human and digital) locate resources. Names can be used by services that enable end-user application programs and by system services to navigate, locate, access, and manipulate mappings between names and specific pieces of digital information such as a file or an object, or between names and specific pieces of equipment such as a printer or a disk array.
Mappings between names and specific resources are called bindings. By properly maintaining and using the bindings, a name service ideally allows users to consistently identify and access the named resources, and to do so without particular regard to the actual location of a copy of the resource. For example, a programmer should be able to invoke a name service interface with the name of a particular resource, and if a copy of the resource exists and can be found, a suitable reference to the copy should be returned. The action of obtaining the location of the actual resource by using the binding is known as name resolution.
For instance, a name service described in U.S. Pat. No. 5,819,044 uses a virtual resource management table having three sorts of fields: name, position, and procedure. For a given virtual resource, the management table creates a correspondence between the virtual resource's name, the position of an actual resource, and the name of a procedure to handle the actual resource. Name resolution is carried out by using a name as a key into the management table to obtain the position of the corresponding actual resource and the procedure name. Access to the resource then becomes possible.
Name bindings are generally used and understood in a particular context, which is defined by the name service and/or name space(s) involved. A name space may be implemented by syntax conventions and/or by a table that maintains the bindings which are used to resolve references to resources within the name space. In some cases the name space is limited to a single machine. But in other cases it can span multiple machines, as with Novell Directory Services or the CORBA Trader Service. Other examples of name spaces are the Domain Name System (“DNS”), the Service Advertising Protocol (“SAP”), and, of course, the many different filesystems in use in various networks.
A distributed computing system may contain multiple name spaces, such as low level service advertising name spaces, or high-level directory service name spaces. If the distributed system's computational objects may be replicated and mobile, it is neither practical nor feasible to require that all names be maintained within a single name space. Accordingly, as the distributed system grows, additional name spaces may be formed in an ad hoc manner for immediate convenience to allow easier and more efficient ways to locate and access computational resources when performing particular tasks.
For example, filesystems assign files to stable permanent locations and give them names which are unique within the given filesystem. When multiple filesystems have been aggregated (as for instance with Transarc's AFS filesystem), the file name within the filesystem has been prepended with the name of the filesystem or the cell within which the file name was assigned. Therefore, one must know where the file is located, at least to some degree of precision, in order to find the file.
Regardless of whether multiple resource name spaces are in use, a distributed system may include multiple copies of a given resource. For instance, copies of files and objects may be stored in cache memory to reduce access times. Files and objects may also be replicated in nonvolatile storage to create copies on several computers in the system. This may be done to create copies on several servers and/or to create copies on mobile computers that disconnect from the system on occasion.
Sometimes one copy of a resource is preferable to another copy. A cached copy may be preferred over one which has not been cached, and a disk copy on a nearby server may be preferred to one on a distant server. A given copy may also be more recent or otherwise more authoritative than another copy. For instance, one copy may have been more recently updated by a user than another copy, and the two copies may not yet have been synchronized.
To summarize, a computational resource is referred to by one or more names which are input to name services. Name services resolve the name by looking it up in a table of name-to-address or name-to-reference bindings which are contained inside some name space. A resource may have more than one name within a given name space. A resource may also have several names in several name spaces or contexts. The distributed system may contain more than one copy of a resource, with differences between copies due to synchronization delays, retrieval delays, or both. Although existing name services are useful, they have drawbacks.
In particular, it would be an advancement in the art to provide an improved distributed computing system name service which resolves location-independent resource names even when several name spaces are being used in the distributed system.
It would be an additional advancement to provide such an improved name service which allows users to locate preferred copies of resources, such as files and objects which are stored in cache, which are stored locally, and/or which are the most current version available.
Such name service improvements are disclosed and claimed herein.